#pragma once
#include <d3d10_1.h>
#include "Video.h"
#include "Shader.h"
using namespace System::Collections::Generic;

namespace Reign
{namespace Video
{namespace D3D10
{
	public ref class BufferLayoutDesc : BufferLayoutDescI
	{
		#pragma region Properties
		private: D3D10_INPUT_ELEMENT_DESC* desc;
		public: property D3D10_INPUT_ELEMENT_DESC* Desc {D3D10_INPUT_ELEMENT_DESC* get();}
		#pragma endregion

		#pragma region Constructors
		public: BufferLayoutDesc(List<BufferLayoutElement>^ elements);
		public: BufferLayoutDesc(BufferLayoutTypes bufferLayoutType);
		public: ~BufferLayoutDesc();
		private: void init();
		private: void null();
		#pragma endregion
	};

	public ref class BufferLayout : Disposable, BufferLayoutI
	{
		#pragma region Properties
		private: Video^ video;
		private: ID3D10InputLayout* layout;
		#pragma endregion
		
		#pragma region Constructors
		public: static BufferLayout^ New(DisposableI^ parent, ShaderI^ shader, BufferLayoutDescI^ bufferLayoutDesc);
		public: BufferLayout(DisposableI^ parent, ShaderI^ shader, BufferLayoutDescI^ bufferLayoutDesc);
		public: ~BufferLayout();
		private: void null();
		#pragma endregion
		
		#pragma region Methods
		public: virtual void Enable();
		#pragma endregion
	};
}
}
}